{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fC7QoKePuJWu"
      },
      "source": [
        "#Training Demo\n",
        "This is a simple example for training the SimSwap 224*224 with VGGFace2-224.\n",
        "\n",
        "Code path: https://github.com/neuralchen/SimSwap\n",
        "If you like the SimSwap project, please star it!\n",
        "Paper path: https://arxiv.org/pdf/2106.06340v1.pdf or https://dl.acm.org/doi/10.1145/3394171.3413630"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "J8WrNaQHuUGC"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Fri Apr 22 12:19:42 2022       \n",
            "+-----------------------------------------------------------------------------+\n",
            "| NVIDIA-SMI 456.71       Driver Version: 456.71       CUDA Version: 11.1     |\n",
            "|-------------------------------+----------------------+----------------------+\n",
            "| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |\n",
            "| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |\n",
            "|===============================+======================+======================|\n",
            "|   0  TITAN Xp           WDDM  | 00000000:01:00.0  On |                  N/A |\n",
            "| 23%   36C    P8    15W / 250W |   1135MiB / 12288MiB |      4%      Default |\n",
            "+-------------------------------+----------------------+----------------------+\n",
            "                                                                               \n",
            "+-----------------------------------------------------------------------------+\n",
            "| Processes:                                                                  |\n",
            "|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |\n",
            "|        ID   ID                                                   Usage      |\n",
            "|=============================================================================|\n",
            "|    0   N/A  N/A      1232    C+G   Insufficient Permissions        N/A      |\n",
            "|    0   N/A  N/A      1240    C+G   Insufficient Permissions        N/A      |\n",
            "|    0   N/A  N/A      1528    C+G   ...y\\ShellExperienceHost.exe    N/A      |\n",
            "|    0   N/A  N/A      7296    C+G   Insufficient Permissions        N/A      |\n",
            "|    0   N/A  N/A      8280    C+G   C:\\Windows\\explorer.exe         N/A      |\n",
            "|    0   N/A  N/A      9532    C+G   ...artMenuExperienceHost.exe    N/A      |\n",
            "|    0   N/A  N/A      9896    C+G   ...5n1h2txyewy\\SearchApp.exe    N/A      |\n",
            "|    0   N/A  N/A     11040    C+G   ...2txyewy\\TextInputHost.exe    N/A      |\n",
            "|    0   N/A  N/A     11424    C+G   Insufficient Permissions        N/A      |\n",
            "|    0   N/A  N/A     13112    C+G   ...icrosoft VS Code\\Code.exe    N/A      |\n",
            "|    0   N/A  N/A     18720    C+G   ...-2.9.15\\GitHubDesktop.exe    N/A      |\n",
            "|    0   N/A  N/A     22996    C+G   ...bbwe\\Microsoft.Photos.exe    N/A      |\n",
            "|    0   N/A  N/A     23512    C+G   ...me\\Application\\chrome.exe    N/A      |\n",
            "|    0   N/A  N/A     25892    C+G   Insufficient Permissions        N/A      |\n",
            "+-----------------------------------------------------------------------------+\n"
          ]
        }
      ],
      "source": [
        "!nvidia-smi"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z6BtQIgWuoqt"
      },
      "source": [
        "Installation\n",
        "All file changes made by this notebook are temporary. You can try to mount your own google drive to store files if you want."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wdQJ9d8N8Tnf"
      },
      "source": [
        "#Get Scripts"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "9jZWwt97uvIe"
      },
      "outputs": [],
      "source": [
        "!git clone https://github.com/neuralchen/SimSwap\n",
        "!cd SimSwap && git pull"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ATLrrbso8Y-Y"
      },
      "source": [
        "# Install Blocks"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "rwvbPhtOvZAL"
      },
      "outputs": [],
      "source": [
        "% pip install googledrivedownloader\n",
        "% pip install timm==0.5.4\n",
        "!wget -P SimSwap/arcface_model https://github.com/neuralchen/SimSwap/releases/download/1.0/arcface_checkpoint.tar"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hleVtHIJ_QUK"
      },
      "source": [
        "#Download the Training Dataset\n",
        "We employ the cropped VGGFace2-224 dataset for this toy training demo.\n",
        "\n",
        "You can download the dataset from our google driver https://drive.google.com/file/d/19pWvdEHS-CEG6tW3PdxdtZ5QEymVjImc/view?usp=sharing\n",
        "\n",
        "***Please check the dataset in dir /content/TrainingData***\n",
        "\n",
        "***If dataset already exists in /content/TrainingData, please do not run blow scripts!***\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "h2tyjBl0Llxp"
      },
      "outputs": [],
      "source": [
        "%mkdir /content/TrainingData\n",
        "!wget --load-cookies /tmp/cookies.txt \"https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=19pWvdEHS-CEG6tW3PdxdtZ5QEymVjImc' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\\1\\n/p')&id=19pWvdEHS-CEG6tW3PdxdtZ5QEymVjImc\" -O /content/TrainingData/vggface2_crop_arcfacealign_224.tar && rm -rf /tmp/cookies.txt\n",
        "%cd /content/\n",
        "!tar -xzvf /content/TrainingData/vggface2_crop_arcfacealign_224.tar -C /content/TrainingData\n",
        " \n",
        "!rm /content/TrainingData/vggface2_crop_arcfacealign_224.tar"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "o5SNDWzA8LjJ"
      },
      "source": [
        "#Trainig\n",
        "Batch size must larger than 1!"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "XCxHa4oW507s"
      },
      "outputs": [],
      "source": [
        "%cd /content/SimSwap\n",
        "!ls\n",
        "!python train.py --name simswap224_test --gpu_ids 0 --dataset /content/TrainingData/vggface2_crop_arcfacealign_224 --Gdeep False"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "collapsed_sections": [],
      "name": "train.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "version": "3.8.5"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
